{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 人工选择匹配角点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "请在源图像上选择至少4个点，按ESC继续\n",
      "请在目标图像上选择对应点（相同顺序），按ESC继续\n",
      "按任意键退出...\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import cv2\n",
    "import numpy as np\n",
    "\n",
    "# 存储选点的列表\n",
    "points_src = []\n",
    "points_dst = []\n",
    "\n",
    "# 鼠标回调函数\n",
    "def select_points_src(event, x, y, flags, param):\n",
    "    if event == cv2.EVENT_LBUTTONDOWN:\n",
    "        points_src.append((x, y))\n",
    "        cv2.circle(img_src_display, (x, y), 5, (0, 255, 0), -1)\n",
    "        cv2.imshow(\"Source Image\", img_src_display)\n",
    "\n",
    "def select_points_dst(event, x, y, flags, param):\n",
    "    if event == cv2.EVENT_LBUTTONDOWN:\n",
    "        points_dst.append((x, y))\n",
    "        cv2.circle(img_dst_display, (x, y), 5, (0, 0, 255), -1)\n",
    "        cv2.imshow(\"Target Image\", img_dst_display)\n",
    "\n",
    "# 读取图像\n",
    "img_src = cv2.imread(rf'G:\\yansi0619\\3D\\aishangliaohou\\ImageData_2025-06-19_16-55-50\\rgb.bmp')  # 源图像（待变换图像）\n",
    "img_dst = cv2.imread(rf'G:\\yansi0619\\spectral\\data\\aishangliohou\\newdata20250619_165140.tiff')  # 目标图像（参考图像）\n",
    "\n",
    "if img_src is None or img_dst is None:\n",
    "    print(\"Error: Could not load images!\")\n",
    "    exit()\n",
    "\n",
    "# 创建显示副本\n",
    "img_src_display = img_src.copy()\n",
    "img_dst_display = img_dst.copy()\n",
    "\n",
    "# 创建窗口并设置回调\n",
    "cv2.namedWindow(\"Source Image\", cv2.WINDOW_AUTOSIZE)\n",
    "cv2.setMouseCallback(\"Source Image\", select_points_src)\n",
    "\n",
    "cv2.namedWindow(\"Target Image\", cv2.WINDOW_AUTOSIZE)\n",
    "cv2.setMouseCallback(\"Target Image\", select_points_dst)\n",
    "\n",
    "print(\"请在源图像上选择至少4个点，按ESC继续\")\n",
    "while True:\n",
    "    cv2.imshow(\"Source Image\", img_src_display)\n",
    "    key = cv2.waitKey(1) & 0xFF\n",
    "    if key == 27:  # ESC键\n",
    "        break\n",
    "\n",
    "print(\"请在目标图像上选择对应点（相同顺序），按ESC继续\")\n",
    "while True:\n",
    "    cv2.imshow(\"Target Image\", img_dst_display)\n",
    "    key = cv2.waitKey(1) & 0xFF\n",
    "    if key == 27:  # ESC键\n",
    "        break\n",
    "\n",
    "cv2.destroyAllWindows()\n",
    "\n",
    "# 检查点数\n",
    "if len(points_src) < 4 or len(points_dst) < 4:\n",
    "    print(\"错误：至少需要4个匹配点！\")\n",
    "    exit()\n",
    "\n",
    "if len(points_src) != len(points_dst):\n",
    "    print(\"错误：源图像和目标图像的点数不一致！\")\n",
    "    exit()\n",
    "\n",
    "# 转换为NumPy数组\n",
    "pts_src = np.array(points_src, dtype=np.float32)\n",
    "pts_dst = np.array(points_dst, dtype=np.float32)\n",
    "\n",
    "# 计算单应性矩阵（透视变换矩阵）\n",
    "H, status = cv2.findHomography(pts_src, pts_dst, cv2.RANSAC, 5.0)\n",
    "\n",
    "if H is None:\n",
    "    print(\"错误：无法计算变换矩阵！\")\n",
    "    exit()\n",
    "\n",
    "# 应用透视变换\n",
    "img_registered = cv2.warpPerspective(img_src, H, (img_dst.shape[1], img_dst.shape[0]))\n",
    "\n",
    "# 创建匹配点可视化\n",
    "img_matches = np.zeros((max(img_src.shape[0], img_dst.shape[0]), img_src.shape[1] + img_dst.shape[1], 3), dtype=np.uint8)\n",
    "img_matches[0:img_src.shape[0], 0:img_src.shape[1]] = img_src\n",
    "img_matches[0:img_dst.shape[0], img_src.shape[1]:] = img_dst\n",
    "\n",
    "# 绘制匹配线\n",
    "for i in range(len(points_src)):\n",
    "    pt1 = (int(points_src[i][0]), int(points_src[i][1]))\n",
    "    pt2 = (int(points_dst[i][0] + img_src.shape[1]), int(points_dst[i][1]))\n",
    "    cv2.line(img_matches, pt1, pt2, (0, 255, 0), 1)\n",
    "    cv2.circle(img_matches, pt1, 5, (0, 255, 0), -1)\n",
    "    cv2.circle(img_matches, pt2, 5, (0, 0, 255), -1)\n",
    "\n",
    "# 创建配准结果可视化\n",
    "alpha = 0.5\n",
    "blended = cv2.addWeighted(img_dst, alpha, img_registered, 1 - alpha, 0)\n",
    "\n",
    "# 显示结果\n",
    "cv2.imshow(\"Feature Matches\", img_matches)\n",
    "cv2.imshow(\"Registration Result\", img_registered)\n",
    "cv2.imshow(\"Overlay Result\", blended)\n",
    "\n",
    "print(\"按任意键退出...\")\n",
    "cv2.waitKey(0)\n",
    "cv2.destroyAllWindows()\n",
    "\n",
    "# 保存结果（可选）\n",
    "cv2.imwrite(\"feature_matches.jpg\", img_matches)\n",
    "cv2.imwrite(\"registered_image.jpg\", img_registered)\n",
    "cv2.imwrite(\"overlay_result.jpg\", blended)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-06-18T03:06:30.591131Z",
     "start_time": "2024-06-18T03:06:30.483420Z"
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import cv2 as cv\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import spectral\n",
    "import glob\n",
    "\n",
    "\n",
    "class ImgRegistration:\n",
    "    def __init__(self, matrix_path, msi_board_path, rgb_board_path):\n",
    "        self.matrix_path = matrix_path\n",
    "        self.msi_board_path = msi_board_path\n",
    "        self.rgb_board_path = rgb_board_path\n",
    "\n",
    "    def get_rectify_M(self):\n",
    "        \"\"\"\n",
    "        获取图像配准变换矩阵M\n",
    "        1.显示特征匹配图片  2.显示模板图片对正效果图\n",
    "        \"\"\"\n",
    "        msi = spectral.open_image(self.msi_board_path).load()\n",
    "        spe_gray = (msi[:, :, 30] / 4).astype(np.uint8)\n",
    "        RGB_img = cv.imdecode(np.fromfile(self.rgb_board_path, dtype=np.uint8), 0)\n",
    "        rgb_gray = RGB_img\n",
    "        sift = cv.SIFT_create()\n",
    "        # 利用SIFT算法寻找特征点\n",
    "        kp1, des1 = sift.detectAndCompute(spe_gray, None)\n",
    "        kp2, des2 = sift.detectAndCompute(rgb_gray, None)\n",
    "        # FLANN parameters\n",
    "        FLANN_INDEX_KDTREE = 1\n",
    "        index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)\n",
    "        search_params = dict(checks=50)\n",
    "        flann = cv.FlannBasedMatcher(index_params, search_params)\n",
    "        matches = flann.knnMatch(des1, des2, k=2)\n",
    "\n",
    "        # Need to draw only good matches, so create a mask\n",
    "        matchesMask = [[0, 0] for i in range(len(matches))]\n",
    "\n",
    "        good = []\n",
    "        pts1 = []\n",
    "        pts2 = []\n",
    "        # ratio test as per Lowe's paper\n",
    "        for i, (m, n) in enumerate(matches):\n",
    "            if m.distance < 0.6 * n.distance:\n",
    "                good.append(m)\n",
    "                pts2.append(kp2[m.trainIdx].pt)\n",
    "                pts1.append(kp1[m.queryIdx].pt)\n",
    "                matchesMask[i] = [1, 0]\n",
    "\n",
    "        draw_params = dict(matchColor=(0, 255, 0),\n",
    "                           singlePointColor=(255, 0, 0),\n",
    "                           matchesMask=matchesMask,\n",
    "                           flags=0)\n",
    "        img3 = cv.drawMatchesKnn(spe_gray, kp1, rgb_gray, kp2, matches, None, **draw_params)\n",
    "        # plt.title('feature matching')\n",
    "        # plt.imshow(img3)\n",
    "        # plt.show()\n",
    "        rows, cols = spe_gray.shape[:2]\n",
    "        MIN_MATCH_COUNT = 10\n",
    "        if len(good) > MIN_MATCH_COUNT:\n",
    "            src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)\n",
    "            dst_pts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)\n",
    "            M, mask = cv.findHomography(src_pts, dst_pts, cv.RANSAC, 5.0)\n",
    "        else:\n",
    "            raise Exception(\"Not enough matches are found - {}/{}\".format(len(good), MIN_MATCH_COUNT))\n",
    "        np.save(self.matrix_path, M)\n",
    "        return \n",
    "\n",
    "    def rectify_msi(self, msi_floder_path , save_path):\n",
    "\n",
    "        msi_path = glob.glob(f'{msi_floder_path}/*.hdr')\n",
    "        M = np.load(self.matrix_path+'.npy')\n",
    "        rgb_img = cv.imdecode(np.fromfile(self.rgb_board_path, dtype=np.uint8), 0)\n",
    "        rows, cols = rgb_img.shape[:2]\n",
    "        msi = spectral.open_image(msi_path[0]).load()\n",
    "        msi_imgs = (msi / 4).astype(np.uint8)\n",
    "        self.warpImgs = cv.warpPerspective(msi_imgs, np.linalg.inv(M), (cols, rows), flags=cv.WARP_INVERSE_MAP)\n",
    "        \n",
    "        for i in range(30):\n",
    "         cv.imwrite(os.path.join(save_path , f'{i + 1}.png'), self.warpImgs[:, :, i])\n",
    "\n",
    "        return "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\dell\\AppData\\Roaming\\Python\\Python39\\site-packages\\spectral\\io\\envi.py:175: UserWarning: Parameters with non-lowercase names encountered and converted to lowercase. To retain source file parameter name capitalization, set spectral.settings.envi_support_nonlowercase_params to True.\n",
      "  warnings.warn(msg)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(2048, 2448, 31)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 帮我写了一个测试代码，你可以直接运行这个代码，看看效果\n",
    "# 你需要修改的地方是，matrix_path，msi_board_path，rgb_board_path，save_path，msi_floder_path\n",
    "# matrix_path是矩阵保存地址，msi_board_path是msi标定板地址，rgb_board_path是rgb标定板地址，save_path是保存地址，msi_floder_path是msi图像地址\n",
    "matrix_path = r'D:\\code\\黄斑识别2'\n",
    "msi_board_path = r'G:\\peizhun\\biaodingban-180236\\2\\biaodingban.hdr'\n",
    "rgb_board_path = r'G:\\peizhun\\biaodingban-180236\\2\\biaodingban.png'\n",
    "\n",
    "save_path = rf'G:\\yellowspot_cigarette\\dt\\sdy-dt-203710\\sdy-dt_20240617203710\\2'\n",
    "msi_floder_path =  save_path\n",
    "\n",
    "reg  = ImgRegistration(matrix_path ,msi_board_path, rgb_board_path)\n",
    "reg.get_rectify_M()\n",
    "reg.rectify_msi(msi_floder_path , save_path)\n",
    "\n",
    "# 得到reg类里面的全局变量warpImgs，是配准后的图像，输出warpImgs\n",
    "reg.warpImgs.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 画个图\n",
    "plt.imshow(reg.warpImgs[:,:,0])  # 0是第一个波段\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x10d80c51ac0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plt显示warpImgs图像             \n",
    "import matplotlib.pyplot as plt\n",
    "plt.imshow(reg.warpImgs[:,:,10])   "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "spe",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
